<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>作用域</title>
</head>

<body>
  <script>
    // 1. 作用域： 全局作用域和局部作用域
    // 1.1 全局作用域： script标签/ js文件
    // 1.2 局部作用域： 函数作用域 和 块级作用域 { }

    // 2. 全局变量: 可以给其他作用域使用的
    let num = 10
    console.log(num) // 10
    function fn() {
      console.log(num) // 10
    }
    fn()

    // 3. 局部变量
    // 3.1 函数内部声明的变量
    function fun() {
      let num1 = 10  // 局部变量，不能给函数外面使用的
    }
    // console.log(num1)  // num1 is not defined

    // 3.2 在大括号内声明的变量
    {
      let x = 10  // 也是一个局部变量
    }
    // console.log(x)   // x is not defined

    for (let i = 0; i < 5; i++) {
      console.log(i)
    }
    // console.log(i)  // i is not defined

    // 4. 注意点
    // 4.1 函数内部的变量，如果没有声明直接赋值，则当全局变量来看
    function func() {
      y = 1 // 我们不提倡这种写法，要避免
    }
    func()
    console.log(y)

    // 4.2 函数内部的形参，当局部变量来看
    function sum(a, b) {
      console.log(a, b)
    }
    sum(1, 2)
    console.log(a, b)
  </script>
</body>

</html>